本篇博文的主要内容是基于Spring Boot,集成阿里开源的Dubbo,实现一个RPC服务。为了实现该RPC,主要依赖以下运行环境:
环境 | 版本 |
---|---|
jdk | 1.8+ |
Maven | 2.0+或者3.0+ |
ZooKeeper | 3.4+ |
Spring Boot | 1.5+ |
Dubbo | 2.5+ |
RPC的内容:远程过程调用,简单实现对User根据ID进行查询服务。
1. 关于ZooKeeper
ZooKeeper 是Apache基金会的独立顶级项目,用来为大型的分布式计算提供分布式配置、分布式一致性、同步、注册等服务。ZooKeeper提供的服务介绍基本如下:
- 命名注册:按照名称标记分布式集群中的节点。
- 配置管理:分布式节点可加载最新的系统配置信息。
- 集群管理:节点状态管理、节点的加入和删除等。
- 选举:选举一个分布式应用中的leader节点。
- 数据共享:用于分布式应用各个节点之间的数据共享。
- 同步服务:提供数据同步,若有数据修改,可加锁,其他节点也可同步更新数据。
使用Dubbo构建RPC要依赖于ZooKeeper的命名、数据同步、共享等服务,因此,在启动一个Dubbo服务之前,要确保你的ZooKeeper集群处于可用的状态。
2. 关于Dubbo
Dubbo 是阿里开源的一款高性能服务框架,致力于提供高性能的RPC服务、SOA服务治理。使得你的应用可以通过集成RPC提高系统性能,还支持与Spring框架的无缝集成。Dubbo主要包括远程过程调用、集群容错、服务自动发现等核心内容。
Dubbo提供了透明化的远程方法调用,可以像调用本地方法一样调用远程方法。它具备负载均衡及容错机制,也可以实现服务自动注册与发现,不再需要写死服务提供者的地址,并且能够平滑添加或删除服务提供者。
官方提供的Dubbo服务治理流程可如下图所示:
- Registry:服务注册中心,目前依赖于ZooKeeper提供的服务。
- Monitor:服务监控,比较好理解。
- Provider:服务端、生产者、服务提供者等,需要先向注册中心注册自己后,才能被消费者发现。
- Consumer:客户端、消费者等,需要先向注册中心订阅自己需要的服务,然后再向生产者调用该服务。
3. 实现RPC服务端
demo地址: https://code.aliyun.com/zhaoyh_code/springcloud-dubbo-server.git
代码是托管在阿里云上,用任意阿里账号即可访问。
服务端demo的工程目录结构如下:
3.1 添加依赖并配置
pom.xml文件中添加如下依赖:
1 | <dependency> |
在application.properties文件中加入以下配置:
1 | #server |
3.2 实现User接口
在UserServiceImpl.java类中:
1 | package com.zhaoyh.storage.impl; |
本例子只是实现了简单假查询的过程,在实际的项目中,getUserById方法中是你的DAO层需要实现的。
@Service注解标识为Dubbo的服务,version记录了版本信息。
另外User.java实体类通过Dubbo的RPC服务调用,需要实现序列化的接口。
4. 实现RPC客户端
demo地址: https://code.aliyun.com/zhaoyh_code/springcloud-dubbo-client.git
客户端demo的工程目录结构如下:
pom.xml文件与RPC服务端的相同,但是application.properties会略有不同:
1 | #server |
只需要指定应用名称和注册中心地址即可。
为了测试RPC服务,本文实现了简单的定时任务用户查询User,参考TestTask.java中的内容:
1 | package com.zhaoyh.storage; |
通过@Reference注解,订阅Dubbo服务端中对应版本号的服务。
5. 测试
启动环境的顺序为:ZooKeeper->Dubbo Server->Dubbo Client
所有的环境启动成功后,Dubbo Client端会每隔30秒,查询一次IUserService中的服务。
以上内容就是关于Spring Boot(五)之集成Dubbo部署RPC服务的全部内容了,谢谢你阅读到了这里!
Author:zhaoyh